package jp.ddo.trismegistos.action;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jp.ddo.trismegistos.exception.RsException;

/**
 * アクションクラスが実装すべきインタフェース。
 * 
 * @author Satoshi
 */
public interface Action {

	/**
	 * メイン処理を実行する。
	 * 
	 * @return 遷移先パス
	 * @throws RsException
	 */
	public String execute() throws RsException;

	/**
	 * HTTPリクエストをセットする。
	 * 
	 * @param request
	 *            HTTPリクエスト
	 */
	public void setHttpServletRequest(final HttpServletRequest request);

	/**
	 * HTTPセッションをセットする。
	 * 
	 * @param session
	 *            HTTPセッション
	 */
	public void setHttpSession(final HttpSession session);

	/**
	 * アプリケーション情報をセットする。
	 * 
	 * @param application
	 *            アプリケーション情報
	 */
	public void setServletContext(final ServletContext application);

	/**
	 * エスケープされたリクエストパラメータ値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return リクエスト内の値
	 */
	public String getEscapedParameter(final String key);

	/**
	 * リクエストパラメータ値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return リクエスト内の値
	 */
	public String getParameter(final String key);

	/**
	 * リクエストパラメータ値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return リクエスト内の値
	 */
	public String[] getParameters(final String key);

	/**
	 * リクエストスコープから値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return リクエスト内の値
	 */
	public Object getRequest(final String key);

	/**
	 * リクエストスコープに値をセットする。
	 * 
	 * @param key
	 *            キー
	 * @param obj
	 *            セットする値
	 */
	public void setRequest(final String key, final Object obj);

	/**
	 * セッションスコープから値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return セッション内の値
	 */
	public Object getSession(final String key);

	/**
	 * セッションスコープに値をセットする。
	 * 
	 * @param key
	 *            キー
	 * @param obj
	 *            セットする値
	 */
	public void setSession(final String key, final Object obj);

	/**
	 * セッションから値を消去する。
	 * 
	 * @param key
	 *            キー
	 */
	public void removeSession(final String key);

	/**
	 * アプリケーションスコープから値を取得する。
	 * 
	 * @param key
	 *            キー
	 * @return アプリケーション内の値
	 */
	public Object getApplication(final String key);

	/**
	 * アプリケーションスコープに値をセットする。
	 * 
	 * @param key
	 *            キー
	 * @param obj
	 *            セットする値
	 */
	public void setApplication(final String key, final Object obj);

	/**
	 * 入力値チェックを行う。
	 * 
	 */
	public void validate();

	/**
	 * 入力値チェックの結果を取得する。
	 * 
	 * @return チェックOKならtrue チェックNGならfalse
	 */
	public boolean check();
}
